uniform vec3 diffuse;
uniform float opacity;

#ifndef FLAT_SHADED

varying vec3 vNormal;

#endif

#include <common>
#include <color_pars_fragment>
#include <uv_pars_fragment>
#include <uv2_pars_fragment>
#include <map_pars_fragment>
#include <alphamap_pars_fragment>
#include <aomap_pars_fragment>
#include <lightmap_pars_fragment>
#include <envmap_pars_fragment>
#include <fog_pars_fragment>
#include <specularmap_pars_fragment>
#include <logdepthbuf_pars_fragment>
#include <clipping_planes_pars_fragment>

varying float vectorVisible;

void main() {

    if (vectorVisible == 0.0) {
        discard;
    }

    #include <clipping_planes_fragment>

    vec4 diffuseColor = vec4(diffuse, opacity);

    #include <logdepthbuf_fragment>
    #include <map_fragment>
    #include <color_fragment>
    #include <alphamap_fragment>
    #include <alphatest_fragment>
    #include <specularmap_fragment>

    ReflectedLight reflectedLight = ReflectedLight(vec3(0.0), vec3(0.0), vec3(0.0), vec3(0.0));

    // accumulation (baked indirect lighting only)
    #ifdef USE_LIGHTMAP

    reflectedLight.indirectDiffuse += texture2D(lightMap, vUv2).xyz * lightMapIntensity;

    #else

    reflectedLight.indirectDiffuse += vec3(1.0);

    #endif

    // modulation
    #include <aomap_fragment>

    reflectedLight.indirectDiffuse *= diffuseColor.rgb;

    vec3 outgoingLight = reflectedLight.indirectDiffuse;

    #include <envmap_fragment>

    gl_FragColor = vec4(outgoingLight, diffuseColor.a);

    #include <premultiplied_alpha_fragment>
    #include <tonemapping_fragment>
    #include <encodings_fragment>
    #include <fog_fragment>

}
